//package org.ejb.entities;
//
//
//
//import javax.persistence.*;
//import javax.xml.bind.annotation.XmlRootElement;
//import java.io.Serializable;
//import java.util.*;
//
///**
// * Cette classe represente un bon de commande. Un bon de commande est cree pour un client
// * et possede plusieurs lignes de commande. Il est lie a une adresse de livraison
// * qui peut etre differente de celle du client.
// * @see Utilisateur
// * @see OrderLine
// */
//
//@Entity
//@Table(name = "order")
//@XmlRootElement
//public class Order implements Serializable {
//
//    // ======================================
//    // =             Attributs              =
//    // ======================================
//    @Id
//    @GeneratedValue(strategy = GenerationType.AUTO)
//    private Long oid;
//    @Column(updatable = false)
//    @Temporal(TemporalType.DATE)
//    private Date orderDate;
//    @ManyToOne(fetch = FetchType.EAGER)
//    @JoinColumn(referencedColumnName = "uid", nullable = false)
//    private Utilisateur utilisateur;
//    /*
//    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
//
//    @JoinColumn(name = "OrderLine", nullable = false)
//    */
//    
//    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, 
//            fetch = FetchType.EAGER)
//    private List<OrderLine> orderLines;
//    
//    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
//    @JoinColumn(name = "address_fk", nullable = false)
//    private Address deliveryAddress;
// // Le prix total de la commande
//    private Float total = 0f;
//    @Embedded
//    @Column (nullable = true)
//    private CreditCard creditCard = new CreditCard();
//
//    // ======================================
//    // =             Constantes             =
//    // ======================================
//
//    // ======================================
//    // =            Constructeurs           =
//    // ======================================
//
//    public Order() {
//    }
//
//    public Order(Utilisateur customer, Address deliveryAddress, CreditCard creditCard) {
//        this.utilisateur = customer;
//        this.deliveryAddress = deliveryAddress;
//        this.creditCard = creditCard;
//    }
//
//    // ======================================
//    // =     Methodes Lifecycle Callback    =
//    // ======================================
//    @PrePersist
//    private void setDefaultData() {
//        orderDate = new Date();
//    }
//
//    // ======================================
//    // =          Methodes publiques        =
//    // ======================================
//    public void getTotal() {
//        if (orderLines == null || orderLines.isEmpty())
//            this.total= 0f;
//
//        Float total = 0f;
//
//        // sum up the quantities
//        for (OrderLine orderLine : orderLines) {
//            total += (orderLine.getSubTotal());
//        }
//
//        this.total = total;
//    }
//    
//    /**
//     * Methode pour distinguer les differentes categories pour un bon de commande
//     * @param order le bon de commande
//     * @return
//     */
//	public static Set<Produit> getDistinctCategories(Order order){
//        Set<Produit> catSet = new HashSet<Produit>();
//        for(OrderLine line:order.getOrderLines()){
//          catSet.add(line.getItem().getProduct());
//        }
//        return catSet;
//    }
//    
//
//    // ======================================
//    // =          Methodes Protegees        =
//    // ======================================
//
//    // ======================================
//    // =             Accesseurs             =
//    // ======================================
//
//    public Long getId() {
//        return oid;
//    }
//
//    public Date getOrderDate() {
//        return orderDate;
//    }
//
//    public Utilisateur getUtilisateur() {
//		return utilisateur;
//	}
//
//	public void setUtilisateur(Utilisateur utilisateur) {
//		this.utilisateur = utilisateur;
//	}
//
//	public void setOrderDate(Date orderDate) {
//		this.orderDate = orderDate;
//	}
//
//	public void setTotal(Float total) {
//		this.total = total;
//	}
//
//    public List<OrderLine> getOrderLines() {
//        return orderLines;
//    }
//
//    public void setOrderLines(List<OrderLine> orderLines) {
//        this.orderLines = orderLines;
//    }
//
//    public Address getDeliveryAddress() {
//        return deliveryAddress;
//    }
//
//    public void setDeliveryAddress(Address deliveryAddress) {
//        this.deliveryAddress = deliveryAddress;
//    }
//    
//
//    public CreditCard getCreditCard() {
//        return creditCard;
//    }
//
//    public void setCreditCard(CreditCard creditCard) {
//        this.creditCard = creditCard;
//    }
//
//    public String getCreditCardNumber() {
//        return creditCard.getCreditCardNumber();
//    }
//
//    public void setCreditCardNumber(String creditCardNumber) {
//        creditCard.setCreditCardNumber(creditCardNumber);
//    }
//
//    public String getCreditCardType() {
//        return creditCard.getCreditCardType();
//    }
//
//    public void setCreditCardType(String creditCardType) {
//        creditCard.setCreditCardType(creditCardType);
//    }
//
//    public String getCreditCardExpiryDate() {
//        return creditCard.getCreditCardExpDate();
//    }
//
//    public void setCreditCardExpiryDate(String creditCardExpiryDate) {
//        creditCard.setCreditCardExpDate(creditCardExpiryDate);
//    }
//
//    // ======================================
//    // =           Methodes Privees         =
//    // ======================================
//
//    // ======================================
//    // =   Methodes hash, equals, toString  =
//    // ======================================
//
//    
//
//	@Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//
//        Order order = (Order) o;
//
//        if (!oid.equals(order.oid)) return false;
//        if (!orderDate.equals(order.orderDate)) return false;
//
//        return true;
//    }
//
//    @Override
//    public int hashCode() {
//        int result;
//        result = oid.hashCode();
//        result = 31 * result + orderDate.hashCode();
//        return result;
//    }
//
//    @Override
//    public String toString() {
//        final StringBuilder sb = new StringBuilder();
//        sb.append("Order");
//        sb.append("{id=").append(oid);
//        sb.append(", orderDate=").append(orderDate);
//        sb.append(", customer=").append(utilisateur);
//        sb.append(", orderLines=").append(orderLines == null ? 0 : orderLines.size());
//        sb.append(", deliveryAddress=").append(deliveryAddress);
//        sb.append(", creditCard=").append(creditCard);
//        sb.append('}');
//        return sb.toString();
//    }
//}
//
